var general = {

    addRandomBalls: function () {

        fw.load.helper('rand');

        var randomColors = [];
        var outputHtml = '';

        for (i = 0; i < 10; i++) {
            randomColors.push(fw.model.settings.balls.types[rand(0, 3)]);
        }

        try {
            var numEls = Number(jQuery('.row:first').css('margin-left').replace('px', ''));
        } catch (e) {
            var numEls = 0;
        }

        if (numEls < 1) {
            outputHtml += '<div class="row" style="margin-top:-70px;margin-left:35px;">';
        } else if (jQuery('.row').length < 1) {
            outputHtml += '<div class="row" style="margin-top:-70px;margin-left:0px;">';
        } else {
            outputHtml += '<div class="row" style="margin-top:-70px;margin-left:0px;">';
        }


        for (i = 0; i < 10; i++) {
            outputHtml += '<div class="holder"><div class="ball ' + randomColors[i] + '"></div></div>';
        }

        outputHtml += '</div>';

        jQuery('#home_container').prepend(outputHtml);
        animation(jQuery('.row:eq(0)'), {
            'margin-top': '0px'
        });

        return outputHtml;
    },

    startFallingBalls: function () {
        window["ball_Int"] = setInterval(function () {
            fw.view.general.addRandomBalls();
            if (jQuery('.row').length >= 12) {
                clearInterval(window["ball_Int"]);
                fw.view.general.gameOver();
            }
        }, fw.model.settings.time_interval_balls);
    },

    markAllAround: function (el) {
        var target_color = $(el).attr('class').split(" ")[1];
        if (jQuery('#checker').length < 1) {
            jQuery('#home_container').prepend('<div id="checker" style="width:120px;height:120px;position:absolute;"></div>');
        }

        jQuery('#checker').css({
            top: jQuery('.ball').eq($(el).index(".ball")).position().top - 25,
            left: jQuery('.ball').eq($(el).index(".ball")).position().left - 25
        });
        jQuery.each(jQuery('.ball.' + target_color).not('.for_kill'), function (a, b) {

            if ((jQuery(b).position().left < jQuery('#checker').position().left) && (jQuery(b).position().left + jQuery(b).width() > jQuery('#checker').position().left)) {
                if ((jQuery(b).position().top + jQuery(b).height() > jQuery('#checker').position().top) && jQuery(b).position().top < jQuery('#checker').position().top + jQuery('#checker').height()) {
                    fw.view.general.killBallElement(jQuery(b), function () {});
                    jQuery(b).addClass('for_kill');
                    fw.view.general.markAllAround(jQuery(b));
                    fw.view.general.markAllAround(jQuery(b));
                }
            } else if (jQuery(b).position().left > jQuery('#checker').position().left && (jQuery(b).position().left < jQuery('#checker').position().left + jQuery('#checker').width())) {
                if ((jQuery(b).position().top + jQuery(b).height() > jQuery('#checker').position().top) && jQuery(b).position().top < jQuery('#checker').position().top + jQuery('#checker').height()) {
                    fw.view.general.killBallElement(jQuery(b), function () {});
                    jQuery(b).addClass('for_kill');
                    fw.view.general.markAllAround(jQuery(b));
                    fw.view.general.markAllAround(jQuery(b));

                }
            }

        }).promise()
            .done(function () {

                fw.view.general.killBallElement(jQuery(el), function () {});


            });

        //setTimeout(function () {

        //}, 1000);
    },

    markAllAroundAllColors: function (el) {
        var target_color = $(el).attr('class').split(" ")[1];
        if (jQuery('#checker').length < 1) {
            jQuery('#home_container').prepend('<div id="checker" style="width:120px;height:120px;position:absolute;"></div>');
        }

        jQuery('#checker').css({
            top: jQuery('.ball').eq($(el).index(".ball")).position().top - 25,
            left: jQuery('.ball').eq($(el).index(".ball")).position().left - 25
        });
        jQuery.each(jQuery('.ball').not('.for_kill'), function (a, b) {

            if ((jQuery(b).position().left < jQuery('#checker').position().left) && (jQuery(b).position().left + jQuery(b).width() > jQuery('#checker').position().left)) {
                if ((jQuery(b).position().top + jQuery(b).height() > jQuery('#checker').position().top) && jQuery(b).position().top < jQuery('#checker').position().top + jQuery('#checker').height()) {
                    //fw.view.general.killBallElement(jQuery(b), function () {});
                    jQuery(b).addClass('not_for_kill');
                    fw.view.general.markAllAroundAllColors(jQuery(b));
                }
            } else if (jQuery(b).position().left > jQuery('#checker').position().left && (jQuery(b).position().left < jQuery('#checker').position().left + jQuery('#checker').width())) {
                if ((jQuery(b).position().top + jQuery(b).height() > jQuery('#checker').position().top) && jQuery(b).position().top < jQuery('#checker').position().top + jQuery('#checker').height()) {
                    //fw.view.general.killBallElement(jQuery(b), function () {});
                    jQuery(b).addClass('not_for_kill');
                    fw.view.general.markAllAroundAllColors(jQuery(b));

                }
            }

        }).promise()
            .done(function () {
                jQuery(el).addClass('not_for_kill');
                //fw.view.general.killBallElement(jQuery(el), function () {});


            });

        //setTimeout(function () {

        //}, 1000);
    },







    getNeer: function (el) {
        //console.log(el);
        var output = [];
        var target_color = $(el).attr('class').split(" ")[1];
        if (jQuery('#checker').length < 1) {
            jQuery('#home_container').prepend('<div id="checker" style="width:120px;height:120px;position:absolute;"></div>');
        }

        jQuery('#checker').css({
            top: jQuery('.ball').eq($(el).index(".ball")).position().top - 25,
            left: jQuery('.ball').eq($(el).index(".ball")).position().left - 25
        });
        jQuery.each(jQuery('.ball').not('.for_kill'), function (a, b) {

            if ((jQuery(b).position().left < jQuery('#checker').position().left) && (jQuery(b).position().left + jQuery(b).width() > jQuery('#checker').position().left)) {
                if ((jQuery(b).position().top + jQuery(b).height() > jQuery('#checker').position().top) && jQuery(b).position().top < jQuery('#checker').position().top + jQuery('#checker').height()) {
                    output.push(jQuery(b));
                }
            } else if (jQuery(b).position().left > jQuery('#checker').position().left && (jQuery(b).position().left < jQuery('#checker').position().left + jQuery('#checker').width())) {
                if ((jQuery(b).position().top + jQuery(b).height() > jQuery('#checker').position().top) && jQuery(b).position().top < jQuery('#checker').position().top + jQuery('#checker').height()) {
                    //fw.view.general.killBallElement(jQuery(b), function () {});
                    output.push(jQuery(b));

                }
            }

        }).promise()
            .done(function () {
                //fw.view.general.killBallElement(jQuery(el), function () {});


            });
        var final_output = [];
        jQuery.each(output, function (a, b) {
            if (jQuery(b).index(this) != jQuery(el).index(this)) {
                final_output.push(jQuery(b));
            }
        });
        return final_output;

        //setTimeout(function () {

        //}, 1000);
    },

    proba: function () {
        var n = 0;
        var site = jQuery('.ball');
        var stabilni = [];
        var temp = [];
        while (true) {
            if (temp[0]) {

                var komsii = fw.view.general.getNeer(temp[0]);
                jQuery.each(komsii, function (k, v) {
                    if (!temp.indexOf(jQuery(v).index(this))) {
                        temp.push(jQuery(v));
                        var pos = site.indexOf(jQuery(v));
                        site.splice(pos, 1);
                    }
                });
                stabilni.push(jQuery(temp[0]));
                temp.splice(0, 1);
            } else {
                if (!jQuery('.ball').eq(jQuery(site[0]).index(this)).parent().parent() == $('.row').eq(0) || !site[0]) {
                    break;
                }
                var komsii = fw.view.general.getNeer(site[0]);
                jQuery.each(komsii, function (k, v) {
                    if (!temp.indexOf(jQuery(v).index(this))) {
                        temp.push(jQuery(v));
                        var pos = site.indexOf(jQuery(v));
                        site.splice(pos, 1);
                    }
                });

                stabilni.push(jQuery(site[0]));
                site.splice(0, 1);
            }

        }
        return site;
    },


    killBalls: function (ballsArr) {
        for (i = 0; i < ballsArr.length; i++) {
            var ball = jQuery('.ball:eq(' + ballsArr[i] + ')');
            jQuery(ball).addClass('killed');
            fw.view.general.killBallElement(jQuery(ball), function () {
                jQuery('.killed').remove();
            });
        }
    },

    killBallElement: function (el, cb) {
        animation(jQuery(el), {
            'margin-top': '1000px'
        }, 400, function () {
            jQuery(el).remove();
            jQuery.each(jQuery('.row'), function (k, v) {
                jQuery(v).find('.holder:not(:has(div.ball))').addClass('empty');



                if (jQuery(v).find('.holder:not(:has(div.ball))').length >= 10) {

                    jQuery.each(jQuery('.row'), function (kk, vv) {

                        if (kk >= k) {
                            animation(jQuery(jQuery(vv)), {
                                'margin-top': '1000px'
                            }, 400, function () {
                                jQuery(vv).remove();
                            });
                        }

                    });
                }




            });
            if (cb) {
                cb();
            }
        });
    },



    gameOver: function () {
        alert('Game Over!');
    },


    getTableArr: function () {
        var empty = [];
        jQuery.each(jQuery('.row'), function (k, v) {
            var tmp_arr = [];
            jQuery.each(jQuery(v).find('.holder'), function (kk, vv) {
                if (jQuery(vv).hasClass('empty')) {
                    tmp_arr.push(0);
                } else {
                    tmp_arr.push(1);
                }
            });
            if (tmp_arr.length) {
                empty[k] = tmp_arr;
            }
        });
        return empty;

    },

    potencijalni: function () {
        jQuery.each(jQuery('.row'), function (a, b) {
            if (a) {
                console.log(Number(jQuery(b).css('margin-left').replace('px', '')));
                if (Number(jQuery(b).css('margin-left').replace('px', '')) == 0) {

                    jQuery.each(jQuery(b).find('.holder'), function (k, v) {
                        if (jQuery(v).find('.ball').length) {
                            if (jQuery('.row').eq(a - 1).find('.holder').eq(k - 1).length) {
                                if (jQuery('.row').eq(a - 1).find('.holder').eq(k).hasClass('empty') && jQuery('.row').eq(a - 1).find('.holder').eq(k - 1).hasClass('empty')) {
                                    jQuery(v).find('.ball').addClass('potencijalno');
                                }
                            } else {
                                if (jQuery('.row').eq(a - 1).find('.holder').eq(k).hasClass('empty')) {
                                    jQuery(v).find('.ball').addClass('potencijalno');
                                }
                            }
                        }

                    });
                } else {

                    jQuery.each(jQuery(b).find('.holder'), function (k, v) {
                        if (jQuery(v).find('.ball').length) {
                            if (jQuery('.row').eq(a - 1).find('.holder').eq(k + 1).length) {
                                if (jQuery('.row').eq(a - 1).find('.holder').eq(k).hasClass('empty') && jQuery('.row').eq(a - 1).find('.holder').eq(k + 1).hasClass('empty')) {
                                    jQuery(v).find('.ball').addClass('potencijalno');
                                }
                            } else {
                                if (jQuery('.row').eq(a - 1).find('.holder').eq(k).hasClass('empty')) {
                                    jQuery(v).find('.ball').addClass('potencijalno');
                                }
                            }
                        }

                    });
                }

            }
        });
    }


};